package com.chs.recoginition.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.chs.recoginition.pojo.Userinfo;
import com.chs.recoginition.pojo.WebSocketMessageResult;
import com.chs.recoginition.vo.PageRespVo;
import com.chs.recoginition.vo.auth.LoginVo;
import com.chs.recoginition.vo.auth.PasswordResetVo;
import com.chs.recoginition.vo.auth.UserPasswordUpdateVo;
import com.chs.recoginition.vo.reqvo.UserPasswordByCodeReqVo;
import com.chs.recoginition.vo.reqvo.UserRegReqVo;
import com.chs.recoginition.vo.reqvo.UserReqVo;
import com.chs.recoginition.vo.reqvo.UserinfoReqVo;
import com.chs.recoginition.vo.respVo.UserInfoRespVo;
import com.chs.recoginition.vo.respVo.UserRespVo;
import org.springframework.security.core.userdetails.UserDetailsService;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * <p>
 * 用户信息表 服务类
 * </p>
 * seckill
 * @author CHS
 * @since 2022-07-23
 */
public interface IUserinfoService extends IService<Userinfo>, UserDetailsService {

    /**
     * 登录
     * @param loginVo
     * @return
     */
    UserRespVo login(LoginVo loginVo);

    /**
     * 分页查询
     * @param reqVo
     * @return
     */
    PageRespVo<UserInfoRespVo> getAllPage( UserinfoReqVo reqVo);

    /**
     * 保存用户信息
     * @param info
     * @return
     */
    Integer saveInfo(Userinfo info, UserRespVo user);

    /**
     * 修改用户信息
     */
    Integer modify(Userinfo info,UserRespVo user);

    /**
     * 删除用户信息
     */
    Integer remove(String idList);

    /**
     * 根据用户名查找用户
     * @param username
     * @return
     */
    UserRespVo getUserByUsername(String username);
    /**
     * 重置密码
     * @param username
     * @param vo
     * @return
     */
    UserRespVo resetPassword(String username, PasswordResetVo vo);

    /**
     * 刷新token
     * @param oldToken
     * @return
     */
    String refresh(String oldToken);

    /**
     * 修改用户密码
     */
    void updatePassword(UserPasswordUpdateVo updateVo);

    /**
     * 上传头像
     * @param response
     * @param file
     * @return
     * @throws IOException
     */
    String uploadUserHeader(HttpServletResponse response, MultipartFile file) throws IOException;

    /**
     * 根据频道获取聊天记录消息
     * @param channelNum
     * @return
     */
    List<WebSocketMessageResult> getRedisMessageList(String channelNum);

    /**
     * 查找用户邮箱
     * @param userOpenId
     * @return
     */
    String findUserEmail(String userOpenId);

    /**
     * 发送邮箱注册账号
     * @param userOpenId
     * @param email
     */
    void sendEmailCodeByReg(String userOpenId,String email);

    /**
     * 通过邮箱注册用户
     * @param reqVo
     */
    void saveUserReg(UserRegReqVo reqVo);

    /**
     * 发送邮箱修改密码
     * @param userOpenId
     */
    void sendEmailCode(String userOpenId);


    /**
     * 根据验证码修改密码
     * @param userPasswordByCodeReqVo
     */
    void updatePasswordByEmailCode(UserPasswordByCodeReqVo userPasswordByCodeReqVo);
}
